package org.dromara.patrol.domain.bo;

import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.patrol.domain.PatrolTemplateNode;

import java.math.BigDecimal;
import java.util.List;

/**
 * 巡店管理-巡店模板分类（评分项）配置业务对象 patrol_template_node
 *
 * @author LionLi
 * @date 2024-03-25
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PatrolTemplateNode.class, reverseConvertGenerate = false)
public class PatrolTemplateNodeBo extends BaseEntity {

    /**
     * 分类id
     */
    @NotNull(message = "分类id不能为空", groups = { EditGroup.class })
    private Long id;

    /**
     * 父级id
     */
//    @NotNull(message = "父级id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long parentId;

    /**
     * 巡店模板id
     */
    @NotNull(message = "巡店模板id不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long templateId;

    /**
     * 分类名称/评分项内容
     */
    @NotBlank(message = "分类名称/评分项内容不能为空", groups = { AddGroup.class, EditGroup.class })
    private String name;

    /**
     * 分值（字段node_score_type=DETAIL_RULES_SUM则必填）
     */
//    @NotNull(message = "分值（字段node_score_type=DETAIL_RULES_SUM则必填）不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal score;

    /**
     * 消耗处理时间，时间戳
     */
    private Long processTime;

    /**
     * 提示
     */
    private String tips;

    /**
     * 备注
     */
    private String remark;

    /**
     * 自检备注
     */
//    @NotBlank(message = "自检备注不能为空", groups = { AddGroup.class, EditGroup.class })
    private String selfCheckRemark;

    /**
     * 是否是评分项（字典表：0 是， 1 否）
     */
    @NotBlank(message = "是否是评分项（字典表：0 是， 1 否）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String isItem;

    /**
     * 整改须传图（字典表：0 是， 1 否）
     */
//    @NotBlank(message = "整改须传图（字典表：0 是， 1 否）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String rectifyImage;

    /**
     * 标准图（可多张图）
     */
//    @NotBlank(message = "标准图（可多张图）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String standardPictures;

    /**
     * 该项计分类型，is_item=是则必填（字典表：null，NO_SCORING 不计分，SCORE_ITEM_VALUE 评分项分值计分，DETAIL_RULES_SUM 评分项分值记分）
     */
//    @NotBlank(message = "该项计分类型，is_item=是则必填（字典表：null，NO_SCORING 不计分，SCORE_ITEM_VALUE 评分项分值计分，DETAIL_RULES_SUM 评分项分值记分）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String nodeScoreType;

//    /**
//     * 细则详情，node_score_type为SCORE_ITEM_VALUE 评分项分值计分是则必填，[
//                                {
//                                    "id": "e53c8dc4-e045-11ee-b913-5d0520c8a34b",
//                                    "nodeId": "e53c66b3-e045-11ee-b913-5d0520c8a34b",
//                                    "name": "22",
//                                    "score": 2,
//                                    "patrolScore": 0,
//                                    "templateId": "192b9cde-df8f-11ee-b568-3d85b2588fff",
//                                    "remark": null,
//                                    "selfCheckRemark": null,
//"reportRectifyResult": "NONE"
//                                },
//                                {
//                                    "id": "e53c8dc5-e045-11ee-b913-5d0520c8a34b",
//                                    "nodeId": "e53c66b3-e045-11ee-b913-5d0520c8a34b",
//                                    "name": "222",
//                                    "score": 22,
//
//     */
//    @NotBlank(message = "细则详情，node_score_type为SCORE_ITEM_VALUE 评分项分值计分是则必填，[
//                                {
//                                    "id": "e53c8dc4-e045-11ee-b913-5d0520c8a34b",
//                                    "nodeId": "e53c66b3-e045-11ee-b913-5d0520c8a34b",
//                                    "name": "22",
//                                    "score": 2,
//                                    "patrolScore": 0,
//                                    "templateId": "192b9cde-df8f-11ee-b568-3d85b2588fff",
//                                    "remark": null,
//                                    "selfCheckRemark": null,
//"reportRectifyResult": "NONE"
//                                },
//                                {
//                                    "id": "e53c8dc5-e045-11ee-b913-5d0520c8a34b",
//                                    "nodeId": "e53c66b3-e045-11ee-b913-5d0520c8a34b",
//                                    "name": "222",
//                                    "score": 22,
//       不能为空", groups = { AddGroup.class, EditGroup.class })
    private String detailRegulations;

    /**
     * 评分模式打分时，得分或扣分是否允许超过最大分值限制（字典表：0 是，1 否）
     */
//    @NotBlank(message = "评分模式打分时，得分或扣分是否允许超过最大分值限制（字典表：0 否，1 是）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String allowExceedLimit;

    /**
     * 评分规则适用范围，is_item=是则必填（字典表：null，DEFAULT 根据评分项或者细则稽核情况得分；CLASSIFICATION 若本评分项“有问题 / 不合格”，评分项所在分类0分；PATROLSTORE 若本评分项“有问题 / 不合格”，本次巡店0分）
     */
//    @NotBlank(message = "评分规则适用范围，is_item=是则必填（字典表：null，DEFAULT 根据评分项或者细则稽核情况得分；CLASSIFICATION 若本评分项“有问题 / 不合格”，评分项所在分类0分；PATROLSTORE 若本评分项“有问题 / 不合格”，本次巡店0分）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String scoringRuleApplyScope;

    /**
     * 不得分的应用分类id（字段scoring_rule_apply_scope=CLASSIFICATION则必填）
     */
//    @NotNull(message = "不得分的应用分类id（字段scoring_rule_apply_scope=CLASSIFICATION则必填）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long applyClassificationId;

    /**
     * 重要性，is_item=是则必填（字典表：null，ORDINARY 普通的，RED_LINE 红线，YELLOW_LINE 黄线）
     */
//    @NotBlank(message = "重要性，is_item=是则必填（字典表：null，ORDINARY 普通的，RED_LINE 红线，YELLOW_LINE 黄线）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String importance;

    /**
     * 责任人得分关联评分项得分，is_item=是则必填（字典表：null，0 是， 1 否）
     */
//    @NotBlank(message = "责任人得分关联评分项得分，is_item=是则必填（字典表：null，0 否， 1 是）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String relDutyPerson;

    /**
     * 巡店时必传图（字典表：0 是， 1 否）
     */
//    @NotBlank(message = "巡店时必传图（字典表：0 否， 1 是）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String patrolStoreImage;

    /**
     * 标签（自定义，可多个）
     */
//    @NotBlank(message = "标签（自定义，可多个）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String label;


    /**
     * 处理实际结果 ： HAS_PROBLEM，NO_PROBLEM
     */
    private String reportRectifyResult;


    private List<PatrolTemplateNodeBo> children;


}
